package com.shenzhenai.module_pattern.demo3;

/**
 * @author huangzehui
 * @date 2025/8/22 13:51 周五
 * @description 25.设计模式-创建型模式-单例设计模式-懒汉式
 * https://www.bilibili.com/video/BV1Yt4y1B7Cm?spm_id_from=333.788.player.switch&vd_source=e07cc8cc94eb22bd76722071b03cd199&p=25
 */
public class Singleton {


    // 私有构造方法
    private Singleton() {
    }

    // 声明 Singleton 类型的变量 instance
    private static Singleton instance;

    // 对外提供访问方式（线程不安全的）
//    public static Singleton getInstance() {
//        // 判断instance是否为null，如果为null，说明还没有创建singleton类的对象
//        // 如果没有，创建一个并返回，如果有、直接返回
//        if (instance == null) {
//            // 线程1等待，线程2获取到cpu的执行权，也会进入到该判断里面
//            instance = new Singleton();
//        }
//        return instance;
//    }


    // 对外提供访问方式（线程安全的）
    public static synchronized Singleton getInstance() {
        // 判断instance是否为null，如果为null，说明还没有创建singleton类的对象
        // 如果没有，创建一个并返回，如果有、直接返回
        if (instance == null) {
            // 线程1等待，线程2获取到cpu的执行权，也会进入到该判断里面
            instance = new Singleton();
        }
        return instance;
    }
}
